<?php
require_once('Arquitectura/AbstractFas.php');
require_once('Clases/Opcion.php');
/*******************************************************
/* Autor : Efrain Gutierrez / Miguel Ortiz
/* Fecha : 11/04/2013
/* Lenguaje: PHP version: 5.4.7
/* Descripción: Clase encargada de las funciones de los Problemas SEM
/********************************************************/

class Problema extends Clases\AbstractFas
{
    /*Atributos Globales*/
    private $idProblema,$texto,$listaOpciones;
    
    /********************************************************
    /* _construct()
    /* Proposito: inicializar el objeto.
    /* Parametros : ninguno
    /* Limitaciones: ninguna.
    /* Retorna: ninguna
    /*********************************************************/    
    public function __construct()
    {
        parent::AbstractFas();
    }
   
    
    /********************************************************
    /* getIdProblema()
    /* Proposito: regresar atributo idProblema.
    /* Parametros : ninguno
    /* Limitaciones: debe de ser diferente de null.
    /* Retorna: el valor de idProblema.
    /*********************************************************/
    public function getIdProblema()
    {
        if($this->idProblema!= null)
            return $this->idProblema; 
    }
    
    /********************************************************
    /* getTexto()
    /* Proposito: regresar atributo texto.
    /* Parametros : ninguno
    /* Limitaciones: debe de ser diferente de null.
    /* Retorna: el valor de texto
    /*********************************************************/
    public function getTexto()
    {
        if($this->texto!= null)
            return $this->texto; 
    }
   
    /********************************************************
    /* setIdProblema(int IdProblema)
    /* Proposito: cambiar el valor del atributo idProblema.
    /* Parametros : idProblema
    /* Limitaciones: el nuevo valor debe de ser diferente de null.
    /* Retorna: nada
    /*********************************************************/    
    public function setIdProblema($idProblema)
    {
        if($idProblema != null)
            $this->idProblema= $idProblema; 
    }
    
    /********************************************************
    /* setTexto(string texto)
    /* Proposito: cambiar el valor del atributo nombre.
    /* Parametros : texto
    /* Limitaciones: el nuevo valor debe de ser diferente de null.
    /* Retorna: nada
    /*********************************************************/
    public function setTexto($texto)
    {
        if($texto!= null)
            $this->texto= $texto; 
    }
    
    /********************************************************
    /* setListaProblema(List listaProblemas)
    /* Proposito: cambiar el valor del atributo listaProblemas.
    /* Parametros : listaProblemas
    /* Limitaciones: el nuevo valor debe de ser diferente de null.
    /* Retorna: nada
    /*********************************************************/
    public function setListaOpciones($listaOpciones)
    {
        if($listaOpciones!= null)
            $this->listaOpciones= $listaOpciones; 
    }
    
    /********************************************************
    /* getListaProblema()
    /* Proposito: regresar atributo listaProblemas.
    /* Parametros : Ninguno
    /* Limitaciones: listaProblemas debe de ser diferente de null.
    /* Retorna: listaProblemas
    /*********************************************************/
    public function getListaOpciones()
    {
        if($this->listaOpciones!= null)
            return $this->listaOpciones; 
    }
    
    /********************************************************
    /* getOpcionesDeProblema()
    /* Proposito: buscar opciones en la base de datos de problema local
    /* Parametros : Ninguno
    /* Limitaciones: Ninguna
    /* Retorna: Ninguno
    /*********************************************************/
    public function getOpcionesDeProblema()
    {
        $opcion = new Opcion();
        $this->setListaProblema($opcion->getOpcionesDeProblema($this->idProblema));
    }
    
    /********************************************************
    /* setNR(int idExamen Alumno)
    /* Proposito: calificar NR del problema
    /* Parametros : examen al que aplicar el nr
    /* Limitaciones: ninguna
    /* Retorna: nada
    /*********************************************************/
    public function setNR($idExamenAlumno)
    {
        $id = 0;
        foreach($this->listaOpciones as $opcion)
        {
            if($opcion->esRespuesta())
                break;
            $id++;
        }
        $this->updateRespuesta($idExamenAlumno, $this->getIdProblema(), $id);
    }
    
    /********************************************************
    /* updateRespuesta(int idExamenAlumno,int idProblema,int idOpcion)
    /* Proposito: seleccionar respuesta de un problema de un examen
    /* Parametros : id del examen, id del problema y id de la opcion seleccionada
    /* Limitaciones: ninguna
    /* Retorna: nada
    /*********************************************************/
    public function updateRespuesta($idExamenAlumno,$idProblema,$idOpcion)
    {
        $lista = array();
        array_push($lista, $idExamenAlumno);
        array_push($lista, $idProblema);
        array_push($lista, $idOpcion);
        $this->execProcedure("updateRespuesta", $lista);
    }
    
    /********************************************************
    /* comandos()
    /* Proposito: validar la existencia de un Problema en la base de datos.
    /* Parametros : ninguno
    /* Limitaciones: Problema inicializado.
    /* Retorna: Verdadero o Falso
    /*********************************************************/
   
    protected function comandos() {
        $this->id = "IdProblema";
        $this->tabla = "`Problema`";
        $this->strDelete = "DeleteProblema";
        $this->strInsertar = "InsertarProblema";
        $this->strUpdate = "UpdateProblema";
    }
    
    /********************************************************
    /* fillFas(my_sql_row row)
    /* Proposito: inicializar un Problema con la info de la base de datos.
    /* Parametros : row de consulta
    /* Limitaciones: row completo mysql
    /* Retorna: Ninguna
    /*********************************************************/
    protected function fillFas($row) {
        $row = mysql_fetch_row($row);
        $this->idProblema = $row[0];
        $this->texto = $row[3];
        $this->listaOpciones = array();
        $p = $this->exec("SELECT IdOpcion from `opcion` where IdProblema = '".$this->idProblema."'");
        while ($row = mysql_fetch_row($p)) {
            $obj = new Opcion();
            $opcion = $obj->get($row[0]);
            array_push($this->listaOpciones, $opcion);
        }
    }

    /********************************************************
    /* get(int id)
    /* Proposito: inicializar un Problema a partir de un id desde una base de datos.
    /* Parametros : id del Problema
    /* Limitaciones: Ninguna
    /* Retorna: Problema
    /*********************************************************/
    public function get($id) {
        $abs = $this->getAbstractFas(new Problema(),$id,$this->tabla,$this->id);
        return $abs;
    }
    
    /********************************************************
    /* getAll
    /* Proposito: inicializar lista de Problemaes existentes desde una base de datos.
    /* Parametros : Ninguna
    /* Limitaciones: Ninguna
    /* Retorna: Lista de Problemaes
    /*********************************************************/
   
    public function getAll() {
        $abs = $this->getAllAbstract($this->tabla,$this->id,new Problema());
        return $abs;
    }
    
    /********************************************************
    /* getAtributos()
    /* Proposito: regresar arreglo de atributos locales
    /* Parametros : Ninguna
    /* Limitaciones: Ninguna
    /* Retorna: Arreglo
    /*********************************************************/
   
    public function getAtributos() {
        $lst = array();
        array_push($lst,$this->idProblema);
        array_push($lst,$this->texto);
        return $lst;
    }
} // fin de la clase Problema

?>
